Blackhole Bet

I love that someone built this.

https://etherscan.io/address/0xa0eebc70f892c18c6c9cbc9bb336968f62e43427

contract Blackhole {

address public previousWinner;
address public feeTo;
address public currentLeader;
uint256 public currentBet;//amount of current bet in wei
uint256 public lastBet;//time of last bet in seconds
bool public currentGame;

event NewBet(uint256 amount, address newLeader);
event NewGameStarted(uint256 amount, address creator);
event Winrar(uint256 amount, address winner);

constructor() {
previousWinner = msg.sender;
feeTo = msg.sender;
}

modifier onlyPreviousWinner() {
require(msg.sender == previousWinner, "You aren't the previous winner");
_;
}

function setFeeTo(address destination) public onlyPreviousWinner {
feeTo = destination;
}

function nextMinimumBet() public view returns(uint256) {
if (currentGame) {
return (currentBet / 10) + currentBet;
} else {
return 100;
}
}

function bet() public payable {
require(msg.value >= nextMinimumBet(), "bet more");
if (!currentGame) {
currentGame = true;
emit NewGameStarted(msg.value, msg.sender);
} else {
payable(feeTo).transfer(msg.value / 1000);
}
currentBet = msg.value;
lastBet = block.timestamp;
currentLeader = msg.sender;
emit NewBet(msg.value, msg.sender);
}

function win() public {
require(block.timestamp >= lastBet + 2 days, "must be leader for 48 hours to collect");
require(msg.sender == currentLeader);
emit Winrar(address(this).balance, msg.sender);
payable(msg.sender).transfer(address(this).balance);
currentGame = false;
currentBet = 0;
previousWinner = msg.sender;
feeTo = msg.sender;
}


}

Betting

function bet() public payable {
require(msg.value >= nextMinimumBet(), "bet more");

// Will start a game on the first bet
if (!currentGame) {
currentGame = true;
emit NewGameStarted(msg.value, msg.sender);
} else {
payable(feeTo).transfer(msg.value / 1000);
}

// Doesn't check that a new bet is made after 48h have passed

currentBet = msg.value;
lastBet = block.timestamp;
currentLeader = msg.sender;

emit NewBet(msg.value, msg.sender);
}

Winning

function win() public {
// while the timestamp could be manipulated, the second require does access control :thumbsup:
require(block.timestamp >= lastBet + 2 days, "must be leader for 48 hours to collect");
require(msg.sender == currentLeader);

emit Winrar(address(this).balance, msg.sender);

payable(msg.sender).transfer(address(this).balance);

// would be more comfortable if currentLeader was reset here but its really not necessary
currentGame = false;
currentBet = 0;
previousWinner = msg.sender;
feeTo = msg.sender;
}